package com.cskaoyan.javase.oop3.innerclazz6.anonymous.exercise;

/**
 * @description: 匿名内部类在实际中的用途
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 直接作为方法的实际参数
 * 匿名内部类（对象）
 *
 */
public class Demo {
    public static void main(String[] args) {
        test(new I() {
            @Override
            public void test() {
                System.out.println("1111111");
            }
        }); //方法要传入一个接口的参数--->实际是要传入一个接口的实现类对象--->创建一个接口的实现类太过于复杂而且我只想用一次--->立刻推出 使用匿名内部类

        test2(new B(){
            @Override
            void test() {
                System.out.println("22222222");
            }
        });
        //方法要传入一个抽象类--->实际要传入抽象类的具体子类对象----->创建一个抽象类的具体实现子类过于复杂,我只想要一次
        //--->立刻推出 使用匿名内部类

        test3(new C(){
            @Override
            public void test() {
                System.out.println("C Son");
            }
        });
        //除了可以传入C的对象 也可以传入C的子类.可以用匿名内部类


    }

    public static void test(I i) {
        //System.out.println(i);
        i.test();
    }

    public static void test2(B b) {
        System.out.println(b);
        //b.test();
    }

    public static void test3(C c){
        c.test();
    }
}

interface I {
    void test();
}

abstract class B {
    abstract void test();
}
class C{
    public void test(){
        System.out.println("C");
    }
}